home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 9
/
FM Towns Free Software Collection 9.iso
/
t_os
/
tool
/
tetujin
/
src
/
g_eff
/
smple00.c
< prev
next >
Wrap
Text File
|
1994-11-16
|
1KB
|
55 lines
#include "smple00.h"
g_softnessFilter( BASICPARA *para, int rate )
{
unsigned char a[10][4] ;
int i, x, y, k1, k2, total ;
int cMax, x1, y1, x2, y2 ; /* 引数を記憶する変数 */
int (*read1)() ;
int (*write)() ;
/* 引数を記憶 */
cMax = para->colorMax ; /* RGBデータの最大値 */
x1 = para->lupx ; /* 領域の対角座標 */
y1 = para->lupy ;
x2 = para->rdwx ;
y2 = para->rdwy ;
read1 = para->read1 ; /* アンドゥバッファ読込関数 */
write = para->write ; /* メインバッファ書込関数 */
k1 = rate >> 3 ; /* オペレータの係数の設定 */
k2 = 256 - k1*8 ;
for( y = y1 ; y <= y2 ; y++ )
{
for( x=x1 ; x <= x2 ; x++ )
{
read1( x-1, y-1, a[0] ) ; /* アンドゥバッファ */
read1( x, y-1, a[1] ) ; /* 3×3ドット */
read1( x+1, y-1, a[2] ) ; /* データ読込 */
read1( x-1, y, a[3] ) ;
read1( x, y, a[4] ) ;
read1( x+1, y, a[5] ) ;
read1( x-1, y+1, a[6] ) ;
read1( x, y+1, a[7] ) ;
read1( x+1, y+1, a[8] ) ;
for( i=0 ; i<3 ; i++ ) /* RGBを3回にわけて計算 */
{
/* たたみ込みの計算 */
total = k1*( (int)(a[0][i]) + a[1][i] + a[2][i] +
a[3][i] + a[5][i] +
a[6][i] + a[7][i] + a[8][i]
) + k2*( (int)(a[4][i]) ) ;
total = (total + 128) >> 8 ; /* 四捨五入 */
if( total < 0 )total = 0 ; /* リミッター */
if( total > cMax )total = cMax ;
a[9][i] = total ; /* a[9]にデータを書込 */
}
write( x, y, a[9] ) ; /* メインバッファに書込 */
}
}
return 0 ;
}